home *** CD-ROM | disk | FTP | other *** search
/ Video Toaster 4.3 / Video Toaster v4.3.iso / 4.2 / arexx / editor / oz / 1-xvols < prev    next >
Text File  |  1998-04-16  |  8KB  |  228 lines

  1. /* 1-XVols.rexx V1.3 -- Allows you to quickly set volume changes in a clip of music.  This sets delays, out points, fade times, and volume levels       */
  2. /*    by Aussie   ©1995 Michael Holten      
  3.  
  4. To use:  Before starting this ARexx...
  5.  
  6.   (1) In your project screen, first select the AUDIO clip (that you wish to control) & then 'duplicate' it.  (You now have two identical audio clips in a row)
  7.  
  8.   (2) Now select the SECOND AUDIO CLIP & open its 'controls'
  9.  
  10.   (3) Slide in 'IN' marker to where your audio should change volume (NOTE: this is the ACTUAL start point of the audio dissolve!) & close its window when done
  11.  
  12. From this point on everything is automated by ARexx, there are no numbers to remember, start times to add together etc.
  13.  
  14.   (4) Run this ARexx routine (with the second audio clip still highlighted)
  15.  
  16.     The Arexx routine will ask you for the volume level for the second clip, and for the length of the transition time for the level change.
  17.  
  18.     That's it - you're all done.  You can even start over by duplicating the second clip & begin your next 'volume change'.
  19.  
  20.  
  21. Notes...
  22.     This routine never alters the IN points of any clips, so that is where you have control to simply move an IN and re-run this routine again to move your fade point.  
  23.  
  24.     The out point of the final audio crouton has the real ending of the set of clips.  The out point of the first clip is set by this routine to to overlap into the second crouton.
  25.  
  26.     This routine is designed to work with one audio clip that gets duplicated.  It will NOT cross fade between two different clips, and it will NOT skip out sections of the audio clip.  It is designed (for safety) to adjust levels at pre-set points for one continuously running audio clip only.
  27.  
  28.     You might also notice that the louder clips are set with your requested fade time, but the softer clips are set with shorter fade times - this is to eliminate any hollow spots in the fade & to establish the soft level quickly beneath the fading loud level.  You can go in afterwards & change these fade lengths manually to go for a different effect.
  29. */
  30.  
  31. call remlib('PROJECT_REXX_PORT')
  32. call addlib('PROJECT_REXX_PORT',0)
  33.  
  34. /* --- begin --- */
  35. OK=1
  36. NotOK=0
  37. highvol=0
  38. AudioNext=NotOK
  39. AudioPrev=NotOK
  40. start_loc=croutonspot()
  41.  
  42. if start_loc>0 then do
  43. /* --- Check previous audio clip --- */
  44.    call croutonpick(start_loc-1)
  45.    if croutontype()=" AUD" then do
  46.       AudioPrev=OK
  47.       prevaudioname=croutonname()
  48.       prevIN=croutongettag(AudioStart)
  49.       prevOUT=prevIN+croutongettag(AudioDuration)
  50.       prevstart=croutongettag(Delay)
  51.       Last_Time_Mode= croutongettag(TimeMode)  /* Locking to 2=prog time   1=inpoint 0=clip */
  52.       prevrecfields=croutongettag(recfields)
  53.       vol1P=croutongettag(AUDIOVOLUME1)
  54.       vol2P=croutongettag(AUDIOVOLUME2)
  55.       end
  56.  
  57. /* --- Read Selected (next) audio clip --- */
  58.    call croutonpick(start_loc)
  59.    if croutontype()=" AUD" then do
  60.       AudioNext=OK
  61.       audioname=croutonname()
  62.       Cut1=croutongettag(AudioStart)
  63.       Duration=croutongettag(AudioDuration)
  64.       Cut2=Duration+Cut1
  65.       vol1N=croutongettag(AUDIOVOLUME1)
  66.       vol2N=croutongettag(AUDIOVOLUME2)
  67.    end
  68.  
  69. /* --- wait for any screen update delay --- */
  70. call time('R')
  71. do while (time('E')<0.5)
  72.     end
  73. end
  74. call req_open("1-XVols - by Aussie","----------------","Sets a volume change & fade into the SELECTED audio clip","and out of the PREVIOUS IDENTICAL audio clip.")
  75.  
  76. /* --- Kick out if both are not audio clips --- */
  77. if AudioNext~=OK | AudioPrev~=OK then do
  78.    test=req_tell("Sorry, CANCELED!"," Both the selected & previous clips","must be AUDIO ONLY clips!  Help?")
  79.    call req_close()
  80.    if test=1 then call quithelp
  81.    call quit()
  82.    end
  83.  
  84. /* --------- check for matching name */
  85. if audioname ~= prevaudioname then do
  86.    test=req_tell("Sorry, CANCELED!","   The 2 AUDIO clips MUST be","  from the identical file.  Help?")
  87.    call req_close()
  88.    if test=1 then call quithelp
  89.    call quit()
  90.    end
  91.  
  92. /* --- Calculate Volumes --- */
  93. vol1=((vol1N/655.35)+0.5)%1
  94. if vol1<0 then vol1=0
  95. if vol1>100 then vol1=100
  96. vol2=((vol2N/655.35)+0.5)%1
  97. if vol2<0 then vol2=0
  98. if vol2>100 then vol2=100
  99. if vol1>highvol then highvol=vol1
  100. if vol2>highvol then highvol=vol2
  101.  
  102.  
  103. highvolprev=0
  104. /*  ------------- get audio levels */
  105. vol1prev=((vol1P/655.35)+0.5)%1
  106. if vol1prev<0 then vol1prev=0
  107. if vol1prev>100 then vol1prev=100
  108. vol2prev=((vol2P/655.35)+0.5)%1
  109. if vol2prev<0 then vol2prev=0
  110. if vol2prev>100 then vol2prev=100
  111. if vol1prev>highvolprev then highvolprev=vol1prev
  112. if vol2prev>highvolprev then highvolprev=vol2prev
  113.  
  114. /* ---------- compare in & out points to avoid ridiculous problems */
  115. if (prevIN>=Cut1) then do
  116.    test=req_tell("Sorry, CANCELED!","The 2nd clip's IN point must be","   higher than the first.  Help?")
  117.    call req_close()
  118.    if test=1 then call quithelp
  119.    call quit()
  120.    end
  121.  
  122.  
  123.  
  124.  
  125. /* ------------ get volumes & fade speed */
  126. volume=req_number("Prev clip:" highvolprev " This vol:",highvol,0,100)
  127. if volume="CANCEL" then do
  128.    call req_close()
  129.    call quitb()
  130.    end
  131. f_fadetime=60
  132. f_want=req_time("Set fade length:",f_fadetime)
  133. if substr(f_want,3,1)~= ":" then do
  134.    call req_close()
  135.    call quitb()
  136.    end
  137.  
  138. fm=substr(f_want,4,2)
  139. fs=substr(f_want,7,2)
  140. ff=substr(f_want,10,2)
  141. f_all=((fm*1800)+(fs*30)+ff)*2
  142. fadetime=f_all
  143.  
  144.  
  145.  
  146.  
  147.  
  148. /* ----------- make all settings */
  149. newprevduration=cut1-prevIN+fadetime
  150. newnextstart=prevstart+cut1-prevIN
  151.  
  152. fadetimeprev=fadetime
  153. fadetimenext=fadetime
  154. if volume>highvolprev then fadetimeprev=fadetime/2
  155. if volume<highvolprev then fadetimenext=fadetime/2
  156.  
  157. if (newprevduration+prevIN)>prevrecfields then do
  158.    test=req_tell("Sorry, CANCELED!","        1st clip runs out before","     this fade is complete.  Help?")
  159.    call req_close()
  160.    if test=1 then call quithelp
  161.    call quit()
  162.    end
  163.  
  164. if duration<(fadetimenext) then do
  165.    test=req_tell("Sorry, CANCELED!","    2nd clip OUT point too close","    to complete this fade.  Help?")
  166.    call req_close()
  167.    if test=1 then call quithelp
  168.    call quit()
  169.    end
  170.  
  171. /* -----------------  Proceed or not */
  172. test=req_tell("Ok to create this volume change","Volume change:" highvolprev "to" volume, "Fade length: " f_want)
  173. call req_close()
  174. if test~=OK then call quitb()
  175.  
  176. /* --- Write to clips --- */
  177. call croutonpick(start_loc-1)
  178. call croutonsettag(AudioDuration,newprevduration)
  179. call croutonsettag(AudioDecay,fadetimeprev)
  180. call croutonsettag(panelmode,1)
  181.  
  182. /* ----------------- */
  183. call croutonpick(start_loc)
  184. call croutonsettag(AudioAttack,fadetimenext)
  185. call croutonsettag(Delay,NewNextStart)
  186. call croutonsettag(panelmode,1)
  187. call croutonsettag(TimeMode,Last_Time_Mode)  /* Locking to 2=prog time  1=inpoint   0=clip */
  188.  
  189. if volume~= highvol then do
  190.    vol1=volume
  191.    vol1=vol1*655.35
  192.    call croutonsettag(AUDIOVOLUME1,vol1)
  193.    vol2=volume
  194.    vol2=vol2*655.35
  195.    call croutonsettag(AUDIOVOLUME2,vol2)
  196.    end
  197.  
  198. quita:
  199. /* --- Wrap Up --- */
  200. call projectupdate()
  201. call croutonpick(start_loc)
  202. call req_error(" OZ:   All Done!  Audio now crossfades a volume change")
  203. call remlib("PROJECT_REXX_PORT")
  204. exit
  205.  
  206. quitb:
  207. test=req_tell("CANCELED!","            Do you want help?"," ")
  208. if test=1 then call quithelp
  209.  
  210. quit:
  211. call croutonpick(start_loc)
  212. call req_error(" OZ:    <<< Last Operation Canceled >>>")
  213. call remlib("PROJECT_REXX_PORT")
  214. exit
  215.  
  216.  
  217.  
  218. /* --------------------- help stuff to explain it all */
  219. quithelp:
  220. test=req_tell("Here is help","1-Pick AUDIO clip, then DUPLICATE","2-Pick second clip & open controls")
  221. if test~=OK then call quit()
  222.  
  223. test=req_tell("More help...","3-Set IN to mark fade start","4-Close window & run this program")
  224. if test~=OK then call quit()
  225.  
  226. test=req_tell("Last help...","It will reset points, change the","volume & set the fades.  Bye.") 
  227. call quit()
  228.